package bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlSelectOneRadio;

import mensagem.MsgCliente;
import session.SessionCidade;
import session.SessionCliente;
import session.SessionCondPagamento;
import entity.Cidade;
import entity.Cliente;
import entity.CondPagamento;

@ManagedBean
@SessionScoped
public class BeanCliente {

	public Cliente cliente = new Cliente();

	public Cliente filtro = new Cliente();

	private CondPagamento condicao = new CondPagamento();

	public SessionCliente session = new SessionCliente();

	public List<Cliente> clientes = new ArrayList<Cliente>();

	private List<CondPagamento> condicoes = new ArrayList<CondPagamento>();

	private SessionCidade sessionC = new SessionCidade();

	private SessionCondPagamento sessionCond = new SessionCondPagamento();

	private HtmlInputText nomeCidade;

	private HtmlInputText nomeCond;

	private HtmlOutputText nome;

	private HtmlOutputText apelido;

	private HtmlOutputText cpf;

	private HtmlOutputText rg;

	private HtmlSelectOneRadio sexo;

	private int inicia;

	private String[] estados;

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public BeanCliente() {
		this.cliente.setTipoCliente("F");

		estados = new String[27];
		estados[0] = "AC";
		estados[1] = "AL";
		estados[2] = "AM";
		estados[3] = "AP";
		estados[4] = "BA";
		estados[5] = "CE";
		estados[6] = "DF";
		estados[7] = "ES";
		estados[8] = "GO";
		estados[9] = "MA";
		estados[10] = "MG";
		estados[11] = "MS";
		estados[12] = "MT";
		estados[13] = "PA";
		estados[14] = "PB";
		estados[15] = "PE";
		estados[16] = "PI";
		estados[17] = "PR";
		estados[18] = "RJ";
		estados[19] = "RN";
		estados[20] = "RO";
		estados[21] = "RR";
		estados[22] = "RS";
		estados[23] = "SC";
		estados[24] = "SE";
		estados[25] = "SP";
		estados[26] = "TO";
	}

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public int getInicia() {
		this.reinit();
		return inicia;
	}

	public String[] getEstados() {
		return estados;
	}

	public HtmlOutputText getCpf() {
		return cpf;
	}

	public void setCpf(HtmlOutputText cpf) {
		this.cpf = cpf;
	}

	public HtmlOutputText getRg() {
		return rg;
	}

	public void setRg(HtmlOutputText rg) {
		this.rg = rg;
	}

	public void setEstados(String[] estados) {
		this.estados = estados;
	}

	public void setInicia(int inicia) {
		this.inicia = inicia;
	}

	public CondPagamento getCondicao() {
		return condicao;
	}

	public void setCondicao(CondPagamento condicao) {
		this.condicao = condicao;
	}

	public HtmlOutputText getNome() {
		return nome;
	}

	public List<CondPagamento> getCondicoes() {
		return condicoes;
	}

	public void setCondicoes(List<CondPagamento> condicoes) {
		this.condicoes = condicoes;
	}

	public void setNome(HtmlOutputText nome) {
		this.nome = nome;
	}

	public HtmlOutputText getApelido() {
		return apelido;
	}

	public void setApelido(HtmlOutputText apelido) {
		this.apelido = apelido;
	}

	public Cliente getFiltro() {
		return filtro;
	}

	public HtmlSelectOneRadio getSexo() {
		return sexo;
	}

	public void setSexo(HtmlSelectOneRadio sexo) {
		this.sexo = sexo;
	}

	public HtmlInputText getNomeCond() {
		return nomeCond;
	}

	public void setNomeCond(HtmlInputText nomeCond) {
		this.nomeCond = nomeCond;
	}

	public SessionCidade getSessionC() {
		return sessionC;
	}

	public void setSessionC(SessionCidade sessionC) {
		this.sessionC = sessionC;
	}

	public HtmlInputText getNomeCidade() {
		return nomeCidade;
	}

	public void setNomeCidade(HtmlInputText nomeCidade) {
		this.nomeCidade = nomeCidade;
	}

	public SessionCondPagamento getSessionCond() {
		return sessionCond;
	}

	public void setSessionCond(SessionCondPagamento sessionCond) {
		this.sessionCond = sessionCond;
	}

	public void setFiltro(Cliente filtro) {
		this.filtro = filtro;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	public SessionCliente getSession() {
		return session;
	}

	public void setSession(SessionCliente session) {
		this.session = session;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	// ///////////////////////////////METODOS/////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public void reinit() {
		this.cliente = new Cliente();
		this.filtro = new Cliente();
		this.clientes = new ArrayList<Cliente>();
		this.nomeCidade.setValue("");
		this.nomeCond.setValue("");
		this.cliente.setTipoCliente("F");
		this.condicoes = new ArrayList<CondPagamento>();
		this.condicao = new CondPagamento();
	}

	public String save() throws Exception {
		if (this.cliente.getId() != null) {
			return this.update();
		} else {
			if (this.session.save(this.cliente)) {
				this.reinit();
				MsgCliente.msgSave();
			}
		}
		return "";
	}

	public String update() throws Exception {
		if (this.session.update(this.cliente)) {
			this.reinit();
			MsgCliente.msgUpdate();
		}
		return null;
	}

	public String remove() {
		try {
			this.session.remove(cliente);
			MsgCliente.msgRemove();
		} catch (Exception e) {
			MsgCliente.msgNotRemove();
		}
		return null;
	}

	public void find() throws Exception {
		this.clientes = this.session.getController().findList(filtro);
	}

	public void findCondicao() throws Exception {
		this.condicoes = this.sessionCond.getController().findList(condicao);
	}

	public void changeType() {
		if (this.cliente.getTipoCliente().equals("J")) {
			this.sexo.setDisabled(true);
			this.apelido.setValue("Nome Fantasia");
			this.nome.setValue("Fornecedor *");
			this.cpf.setValue("CNPJ *");
			this.rg.setValue("Inscricao Estadual *");
		} else {
			this.sexo.setDisabled(false);
			this.nome.setValue("Cliente *");
			this.apelido.setValue("Apelido");
			this.cpf.setValue("CPF *");
			this.rg.setValue("RG *");
		}
	}

	public String hotFindCidade() {
		if (this.cliente.getCidade() != null) {
			if ((this.cliente.getCidade().getId() != null)
					&& (this.cliente.getCidade().getCidade() != null)) {
				int aux = this.cliente.getCidade().getId();
				this.cliente.setCidade(new Cidade());
				this.cliente.getCidade().setId(aux);
			}
		}

		if ((this.cliente.getCidade() != null)
				&& (this.cliente.getCidade().getId() != null)) {
			try {
				this.cliente.setCidade(this.sessionC.getController().find(
						this.cliente.getCidade()));
			} catch (Exception e) {
				this.cliente.setCidade(new Cidade());
			}
			if ((this.cliente.getCidade() != null)
					&& (cliente.getCidade().getCidade() != null)) {
				this.nomeCidade.setValue(cliente.getCidade().getCidade());
				return null;
			}
		}
		this.cliente.setCidade(new Cidade());
		return null;
	}

	public String hotFindCondPagamento() {
		if (this.cliente.getCondPagamento() != null) {
			if ((this.cliente.getCondPagamento().getId() != null)
					&& (this.cliente.getCondPagamento().getDescricao() != null)) {
				int aux = this.cliente.getCondPagamento().getId();
				this.cliente.setCondPagamento(new CondPagamento());
				this.cliente.getCondPagamento().setId(aux);
			}
		}

		if ((this.cliente.getCondPagamento() != null)
				&& (this.cliente.getCondPagamento().getId() != null)) {
			try {
				this.cliente.setCondPagamento(this.sessionCond.getController()
						.find(this.cliente.getCondPagamento()));
			} catch (Exception e) {
				this.cliente.setCondPagamento(new CondPagamento());
			}
			if ((this.cliente.getCondPagamento() != null)
					&& (this.cliente.getCondPagamento().getDescricao() != null)) {
				this.nomeCond.setValue(this.cliente.getCondPagamento()
						.getDescricao());
				return null;
			}
		}
		this.cliente.setCondPagamento(new CondPagamento());
		return null;
	}

}
